Manejo de Bases de Datos
Marco de datos
Para trabajar con bases de datos en R se pueden construir o cargar al software. En cualquier caso, la idea es tener un objeto data.frame que el tipo que identifica las bases de datos.
Construcción
Para construir una base de datos, se debe definir las variables que representan las columnas, y el contenido de cada variable son la representación en cada fila, es importante que todas las variables tengan el mismo tamaño para construir una base de datos consistente.
years <- 1980:2019
nombre <- sample(c("Luisa","Andrés","Camilo","Natalia"),
size = 40,replace = T)
peso <- round(rnorm(40,60,5),2)
estatura <- ifelse(nombre=="Luisa",1.56,
ifelse(nombre=="Andrés",1.78,
ifelse(nombre=="Camilo",1.70,1.68)))
imc <- round(peso/estatura^2,2)Cada variable está asignada de manera independiente, aún no es una base de datos. Para que cumpla con la condición de base de datos es necesario que cada fila de cada variable represente una medición, es decir, si la primera posición del nombre es Camilo entonces las primera posición de las variables year, peso, estatura y imc deben corresponder a Camilo.
Para construir la base de datos, se usa el comando data.frame.
args(data.frame)## function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,
## fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors())
## NULL
(datos <- data.frame(years, nombre, peso, estatura, imc))str(datos)## 'data.frame': 40 obs. of 5 variables:
## $ years : int 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 ...
## $ nombre : Factor w/ 4 levels "Andrés","Camilo",..: 3 1 2 2 2 2 3 3 1 4 ...
## $ peso : num 55.2 57.6 56.1 59.4 61 ...
## $ estatura: num 1.56 1.78 1.7 1.7 1.7 1.7 1.56 1.56 1.78 1.68 ...
## $ imc : num 22.7 18.2 19.4 20.6 21.1 ...
Con la base de datos creada se puede manipular más fácil, para ingresar a las filas y columnas se trabaja similar a las matrices.
datos[,1]## [1] 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993
## [15] 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
## [29] 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
datos[,"nombre"]## [1] Luisa Andrés Camilo Camilo Camilo Camilo Luisa Luisa
## [9] Andrés Natalia Camilo Luisa Camilo Andrés Natalia Andrés
## [17] Natalia Natalia Camilo Luisa Andrés Andrés Luisa Camilo
## [25] Natalia Natalia Luisa Camilo Camilo Camilo Camilo Luisa
## [33] Luisa Andrés Camilo Luisa Andrés Luisa Natalia Camilo
## Levels: Andrés Camilo Luisa Natalia
datos[8:24,]datos[,c(1,3,5)]datos[,c("years","imc")]cargar base de datos
R maneja casi cualquier tipo de archivo de bases de datos, pero su formato de creación de base de datos es .Rds o .RData, en el paquete base y utilsexiste una colección de funciones para leer marcos de datos.
## [1] "read.dcf" "readBin" "readChar" "readline"
## [5] "readLines" "readRDS" "readRenviron" "Sys.readlink"
## [1] "read.csv" "read.csv2" "read.delim"
## [4] "read.delim2" "read.DIF" "read.fortran"
## [7] "read.fwf" "read.socket" "read.table"
## [10] "readCitationFile" "readClipboard" "readRegistry"
Para cargar otras extensiones de bases de datos es necesario utilizar paquetes.
# Para otros Software de estadística (Minitab, SAS, Stata, SPSS)
install.packages("haven",dependencies = T)
install.packages("foreign",dependencies = T)
# Archivos de excel
install.packages("xlsx",dependencies = T) # Requiere Java
install.packages("readxl",dependencies = T)
# SQL
install.packages("sqldf",dependencies = T)Para trabajar con SQL en R se recomienda leer el artículo de Josh Errickson y las notas de Data Carpentry.
La base de datos de el ICFES 2015-02 está disponible en Excel, todos los ejemplos que acontinuación se muestran se trabajan con esta base de datos.
library(xlsx)
library(readxl)
Icfes <- read.csv("ICFES20152.csv",sep = ",")Si el archivo tiene la extensión .xlsx se utiliza los siguientes comandos:
# Con xlsx
Icfes <- read.xlsx(file = "ICFES20152.xlsx",sheetName = 1,encoding = "UTF-8")
Icfes <- read.xlsx2(file = "ICFES20152.xls",sheetIndex = 1)
# Con readxl
Icfes <- read_xlsx(path = "ICFES20152.xlsx")Para cargar los archivos de esta manera es necesario que se encuentren alojados en la carpeta de trabajo que puede verificar con el comand getwd(), y para asignar una nuava ruta se utiliza el comando setwd(). Una función muy útil para buscar carpetas es choose.dir(), y para seleccionar una archivo específico file.choose().
Icfesdim(Icfes)## [1] 12162 24
length(Icfes)## [1] 24
names(Icfes)## [1] "CODINST" "NOMBREINSTITUCION"
## [3] "CODIGOMUNICIPIO" "NOMBREMUNICIPIO"
## [5] "DEPARTAMENTO" "CALENDARIO"
## [7] "NATURALEZA" "JORNADA"
## [9] "EVALUADOS" "PROMLECTURACRITICA"
## [11] "PROMMATEMATICA" "PROMSOCIALESYCIUDADANAS"
## [13] "PROMCIENCIASNATURALES" "PROMINGLES"
## [15] "PROMRAZONAMIENTOCUANTITA" "PROMCOMPETENCIASCIUDADAN"
## [17] "DESVLECTURACRITICA" "DESVMATEMATICA"
## [19] "DESVSOCIALESYCIUDADANAS" "DESVCIENCIASNATURALES"
## [21] "DESVINGLES" "DESVRAZONAMIENTOCUANTITA"
## [23] "DESVCOMPETENCIASCIUDADAN" "PERIODO"
head(Icfes,n = 3)tail(Icfes,n = 3)str(Icfes)## 'data.frame': 12162 obs. of 24 variables:
## $ CODINST : Factor w/ 12162 levels "000018","000059",..: 9051 5071 7139 1288 2311 3814 3815 5069 5437 7160 ...
## $ NOMBREINSTITUCION : Factor w/ 9354 levels "02/03 ALEJANDRO CABAL POMBO",..: 4720 4472 4716 4624 4704 4702 1489 1223 4482 5052 ...
## $ CODIGOMUNICIPIO : Factor w/ 1109 levels "05001","05002",..: 1090 1091 1092 1089 1089 1089 1089 1089 1089 1089 ...
## $ NOMBREMUNICIPIO : Factor w/ 1026 levels "ABEJORRAL","ABREGO",..: 278 425 443 467 467 467 467 467 467 467 ...
## $ DEPARTAMENTO : Factor w/ 33 levels "AMAZONAS","ANTIOQUIA",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ CALENDARIO : Factor w/ 3 levels "A","B","O": 1 1 1 1 1 1 1 1 1 1 ...
## $ NATURALEZA : Factor w/ 2 levels "NO OFICIAL","OFICIAL": 2 2 2 2 2 2 2 1 2 2 ...
## $ JORNADA : Factor w/ 5 levels "COMPLETA U ORDINARIA",..: 2 2 1 2 2 1 1 2 2 2 ...
## $ EVALUADOS : num 21 38 31 89 134 75 14 18 45 61 ...
## $ PROMLECTURACRITICA : num 42.5 40.1 39.9 49.9 45.9 ...
## $ PROMMATEMATICA : num 42 40.2 39.5 47.6 44 ...
## $ PROMSOCIALESYCIUDADANAS : num 43.7 41.3 38.8 50.3 47 ...
## $ PROMCIENCIASNATURALES : num 44.2 41.8 42.7 49.5 46.5 ...
## $ PROMINGLES : num 46 43.6 43.8 47.8 46.6 ...
## $ PROMRAZONAMIENTOCUANTITA: num 41.8 40.3 39.7 48 45 ...
## $ PROMCOMPETENCIASCIUDADAN: num 42 39 37.7 49.4 46.4 ...
## $ DESVLECTURACRITICA : num 5.78 6.01 5.98 7.94 7.88 6.22 6.28 9.65 6.6 8.02 ...
## $ DESVMATEMATICA : num 7.37 7.43 9.04 9.5 8.41 ...
## $ DESVSOCIALESYCIUDADANAS : num 7.52 7.72 8.56 9.38 8.22 ...
## $ DESVCIENCIASNATURALES : num 5.94 5.23 5.32 6.81 6.44 ...
## $ DESVINGLES : num 6.72 4.48 5.42 7.49 6.13 ...
## $ DESVRAZONAMIENTOCUANTITA: num 8.23 7.57 9.3 10.42 8.9 ...
## $ DESVCOMPETENCIASCIUDADAN: num 7.1 7.27 6.77 8.95 8.24 ...
## $ PERIODO : Factor w/ 1 level "20152": 1 1 1 1 1 1 1 1 1 1 ...
class(Icfes)## [1] "data.frame"
class(Icfes$NOMBREMUNICIPIO)## [1] "factor"
summary(Icfes)## CODINST
## 000018 : 1
## 000059 : 1
## 000075 : 1
## 000083 : 1
## 000091 : 1
## 000125 : 1
## (Other):12156
## NOMBREINSTITUCION
## INSTITUTO TECNICO PARA EL DESARROLLO RURAL IDEAR : 28
## INSTITUTO REGIONAL COREDI : 26
## SIMON BOLIVAR : 15
## ANTONIO NARIÑO : 14
## INSTITUTO DE EDUCACION RURAL SANTA MARIA DEL CAMINO: 13
## JORGE ELIECER GAITAN : 13
## (Other) :12053
## CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO CALENDARIO
## 11001 :1459 BOGOTÁ D.C. :1459 BOGOTA :1459 A:11941
## 76001 : 438 CALI : 438 ANTIOQUIA :1411 B: 191
## 05001 : 419 MEDELLIN : 419 VALLE : 991 O: 30
## 08001 : 341 BARRANQUILLA: 341 CUNDINAMARCA: 924
## 13001 : 237 CARTAGENA : 237 SANTANDER : 694
## 54001 : 167 CUCUTA : 167 ATLANTICO : 589
## (Other):9101 (Other) :9101 (Other) :6094
## NATURALEZA JORNADA EVALUADOS
## NO OFICIAL:3735 COMPLETA U ORDINARIA:2875 Min. : 1.00
## OFICIAL :8427 MAÑANA :5701 1st Qu.: 17.00
## NOCHE :1045 Median : 32.00
## SABATINA - DOMINICAL: 979 Mean : 44.95
## TARDE :1558 3rd Qu.: 60.00
## NA's : 4 Max. :987.00
##
## PROMLECTURACRITICA PROMMATEMATICA PROMSOCIALESYCIUDADANAS
## Min. :28.00 Min. : 24.50 Min. :21.00
## 1st Qu.:44.74 1st Qu.: 43.57 1st Qu.:43.98
## Median :48.19 Median : 48.00 Median :48.32
## Mean :48.66 Mean : 48.80 Mean :48.64
## 3rd Qu.:51.77 3rd Qu.: 52.63 3rd Qu.:52.59
## Max. :77.00 Max. :100.00 Max. :83.00
##
## PROMCIENCIASNATURALES PROMINGLES PROMRAZONAMIENTOCUANTITA
## Min. :25.00 Min. :25.00 Min. : 21.50
## 1st Qu.:44.59 1st Qu.:45.27 1st Qu.: 44.05
## Median :48.47 Median :47.51 Median : 48.94
## Mean :49.03 Mean :49.63 Mean : 49.67
## 3rd Qu.:52.45 3rd Qu.:51.27 3rd Qu.: 53.95
## Max. :85.95 Max. :97.00 Max. :100.00
##
## PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA DESVMATEMATICA
## Min. :22.00 Min. : 0.000 Min. : 0.000
## 1st Qu.:44.22 1st Qu.: 6.540 1st Qu.: 7.880
## Median :48.13 Median : 7.470 Median : 9.020
## Mean :48.27 Mean : 7.406 Mean : 9.056
## 3rd Qu.:51.92 3rd Qu.: 8.320 3rd Qu.:10.260
## Max. :76.00 Max. :21.920 Max. :31.820
##
## DESVSOCIALESYCIUDADANAS DESVCIENCIASNATURALES DESVINGLES
## Min. : 0.000 Min. : 0.000 Min. : 0.000
## 1st Qu.: 8.140 1st Qu.: 6.560 1st Qu.: 5.620
## Median : 9.060 Median : 7.580 Median : 6.840
## Mean : 8.984 Mean : 7.541 Mean : 7.501
## 3rd Qu.: 9.970 3rd Qu.: 8.550 3rd Qu.: 8.940
## Max. :28.000 Max. :20.510 Max. :27.790
##
## DESVRAZONAMIENTOCUANTITA DESVCOMPETENCIASCIUDADAN PERIODO
## Min. : 0.00 Min. : 0.000 20152:12162
## 1st Qu.: 8.94 1st Qu.: 7.400
## Median :10.30 Median : 8.240
## Mean :10.33 Mean : 8.172
## 3rd Qu.:11.76 3rd Qu.: 9.080
## Max. :32.19 Max. :23.330
##
El operador $ sirve para extraer las variables del data.frame, siepre y cuando la base de datos posea nombres.
Guardar bases de datos
## [1] "write" "write.dcf" "writeBin" "writeChar" "writeLines"
## [1] "aspell_write_personal_dictionary_file"
## [2] "write.csv"
## [3] "write.csv2"
## [4] "write.socket"
## [5] "write.table"
## [6] "writeClipboard"
## [1] "write.xlsx" "write.xlsx2"
## [1] "write_dta" "write_sas" "write_sav" "write_xpt"
## [1] "write.arff" "write.dbf" "write.dta" "write.foreign"
Funciones del tipo apply
apply() Aplica la función sobre un la marginal de un arreglo o matriz.
(m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2))## [,1] [,2]
## [1,] 1 11
## [2,] 2 12
## [3,] 3 13
## [4,] 4 14
## [5,] 5 15
## [6,] 6 16
## [7,] 7 17
## [8,] 8 18
## [9,] 9 19
## [10,] 10 20
apply(m, 1, mean)## [1] 6 7 8 9 10 11 12 13 14 15
apply(m, 2, mean)## [1] 5.5 15.5
apply(m, 1:2, function(x) x/2)## [,1] [,2]
## [1,] 0.5 5.5
## [2,] 1.0 6.0
## [3,] 1.5 6.5
## [4,] 2.0 7.0
## [5,] 2.5 7.5
## [6,] 3.0 8.0
## [7,] 3.5 8.5
## [8,] 4.0 9.0
## [9,] 4.5 9.5
## [10,] 5.0 10.0
apply(Icfes, 2, length)## CODINST NOMBREINSTITUCION CODIGOMUNICIPIO
## 12162 12162 12162
## NOMBREMUNICIPIO DEPARTAMENTO CALENDARIO
## 12162 12162 12162
## NATURALEZA JORNADA EVALUADOS
## 12162 12162 12162
## PROMLECTURACRITICA PROMMATEMATICA PROMSOCIALESYCIUDADANAS
## 12162 12162 12162
## PROMCIENCIASNATURALES PROMINGLES PROMRAZONAMIENTOCUANTITA
## 12162 12162 12162
## PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA DESVMATEMATICA
## 12162 12162 12162
## DESVSOCIALESYCIUDADANAS DESVCIENCIASNATURALES DESVINGLES
## 12162 12162 12162
## DESVRAZONAMIENTOCUANTITA DESVCOMPETENCIASCIUDADAN PERIODO
## 12162 12162 12162
apply(Icfes[,9:18], 2, mean)## EVALUADOS PROMLECTURACRITICA PROMMATEMATICA
## 44.947788 48.655567 48.799209
## PROMSOCIALESYCIUDADANAS PROMCIENCIASNATURALES PROMINGLES
## 48.636474 49.025593 49.633360
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA
## 49.672010 48.267984 7.406274
## DESVMATEMATICA
## 9.055529
apply(Icfes[,9:18], 2, sd)## EVALUADOS PROMLECTURACRITICA PROMMATEMATICA
## 43.843946 5.573827 7.580989
## PROMSOCIALESYCIUDADANAS PROMCIENCIASNATURALES PROMINGLES
## 6.649614 6.260166 7.269747
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA
## 8.120015 5.730609 1.731647
## DESVMATEMATICA
## 2.219776
by() Aplica la función sobre una división de una base de datos (data.frame) por un factor.
by(Icfes[,c(9:18)], Icfes$CALENDARIO, colMeans)## Icfes$CALENDARIO: A
## EVALUADOS PROMLECTURACRITICA PROMMATEMATICA
## 45.393267 48.601547 48.741677
## PROMSOCIALESYCIUDADANAS PROMCIENCIASNATURALES PROMINGLES
## 48.589383 48.972063 49.514758
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA
## 49.612257 48.229033 7.436473
## DESVMATEMATICA
## 9.091584
## --------------------------------------------------------
## Icfes$CALENDARIO: B
## EVALUADOS PROMLECTURACRITICA PROMMATEMATICA
## 16.685864 52.229529 52.711885
## PROMSOCIALESYCIUDADANAS PROMCIENCIASNATURALES PROMINGLES
## 51.758220 52.761885 56.728743
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA
## 53.712199 50.859634 5.469215
## DESVMATEMATICA
## 6.880628
## --------------------------------------------------------
## Icfes$CALENDARIO: O
## EVALUADOS PROMLECTURACRITICA PROMMATEMATICA
## 47.566667 47.403333 46.788333
## PROMSOCIALESYCIUDADANAS PROMCIENCIASNATURALES PROMINGLES
## 47.505333 46.544667 51.666667
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA
## 47.733333 47.271667 7.718667
## DESVMATEMATICA
## 8.551333
lapply() Aplica una función sobre una lista o un vector.
l <- list(a = 1:10, b = 11:20)
lapply(l, mean)## $a
## [1] 5.5
##
## $b
## [1] 15.5
lapply(l, sum)## $a
## [1] 55
##
## $b
## [1] 155
sapply() Aplica una función sobre una lista o un vector y si el resultado se puede simplificar en un formato más simple, lo hace.
l <- list(a = 1:10, b = 11:20)
sapply(l, mean)## a b
## 5.5 15.5
sapply(l, sum)## a b
## 55 155
vapply() Aplica la función sobre una lista y devuelve el resultado de acuerdo a un formato indicado.
l <- list(a = 1:10, b = 11:20)
lFivenum <- vapply(l,
fivenum,
c(Min. = 0, "1er Cuart." = 0,
Mediana = 0, "3er Cuart." = 0, Max. = 0))
class(lFivenum)## [1] "matrix"
lFivenum## a b
## Min. 1.0 11.0
## 1er Cuart. 3.0 13.0
## Mediana 5.5 15.5
## 3er Cuart. 8.0 18.0
## Max. 10.0 20.0
replicate() Replica la ejecución de una función un número específico de veces.s
replicate(10, rnorm(10))## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.4159918 0.68452043 -0.82432435 1.91173065 -0.4325229 -0.8410961
## [2,] -0.3269063 -1.41414532 -1.27326175 0.40588319 0.8429066 0.9620038
## [3,] -0.7094948 -0.45757289 0.25232732 -1.20678868 0.8647470 1.2086273
## [4,] 0.2878781 -0.06921045 0.04329311 1.20448429 -0.6466194 0.1453659
## [5,] -1.1107180 1.77132553 -0.48125523 -2.56186097 -0.5090645 0.5963150
## [6,] 1.0381331 0.58324073 -1.62355431 -0.06121217 0.8276813 0.5332769
## [7,] 1.3197768 1.01401887 0.60834508 -0.74453797 1.3199990 -0.5096405
## [8,] 0.6315210 -0.29680489 -1.57372991 1.07323390 0.5192054 -0.7073253
## [9,] -0.6420539 -0.33915287 0.97000853 0.58963241 -0.5289340 -1.0752734
## [10,] -0.2188866 -0.45783952 0.04537551 0.96622140 1.2253106 -1.3437104
## [,7] [,8] [,9] [,10]
## [1,] 0.741500549 1.4400315 1.56271523 -0.51419165
## [2,] -0.137568261 -1.0467237 0.18125571 0.59084918
## [3,] 1.214612465 -0.2923828 0.37023122 -0.03483158
## [4,] -1.051518527 -0.3808571 -0.75374319 -0.66818680
## [5,] 0.001775384 1.0714359 -0.16115601 2.12319886
## [6,] 1.837939545 0.5117921 -0.08907589 -0.73825888
## [7,] 0.760940951 0.6352738 0.56749662 0.13052829
## [8,] 0.320877660 0.7223038 -1.67239977 0.35215466
## [9,] -0.276719368 0.2565064 1.71067181 0.24385830
## [10,] 1.273665936 0.7014593 -1.92246471 -1.26538055
replicate(8, mean(rexp(10)))## [1] 0.5656467 0.5643708 1.6820359 0.7960463 1.0256630 0.9727241 0.8560925
## [8] 0.9635558
mapply() Es la versión multivariada de lapply y sapply. Aplica la función a los elementos correspondientes de múltiples listas.
l1 <- list(a = c(1:10), b = c(11:20))
l2 <- list(c = c(21:30), d = c(31:40))
mapply(sum, l1$a, l1$b, l2$c, l2$d)## [1] 64 68 72 76 80 84 88 92 96 100
mapply(sum, l1, l2)## a b
## 310 510
l2 <- list(c = c(21:30), d = c(31:40), z = c(31:50))
mapply(sum, l1$a, l1$b, l2$c, l2$z)## [1] 64 68 72 76 80 84 88 92 96 100 74 78 82 86 90 94 98
## [18] 102 106 110
tapply() Aplica la función sobre un vector, de acuerdo a una clasificación de la variable tipo factor.
tapply(Icfes$EVALUADOS, Icfes$JORNADA, mean)## COMPLETA U ORDINARIA MAÑANA NOCHE
## 37.73148 49.74110 34.91196
## SABATINA - DOMINICAL TARDE
## 35.92033 53.13094
tapply(Icfes$PROMRAZONAMIENTOCUANTITA, Icfes$JORNADA, mean)## COMPLETA U ORDINARIA MAÑANA NOCHE
## 54.80120 49.65380 42.64660
## SABATINA - DOMINICAL TARDE
## 42.56121 49.44264
Tidyverse
En el universo de tidyverse la programación vía tuberías es la principal novedad.
install.packages("dplyr",dependencies = T)library(dplyr)
Icfes2 <- tbl_df(Icfes)Filtrar una base de datos
filter(Icfes2[1:100,], DEPARTAMENTO == "ANTIOQUIA",
NOMBREMUNICIPIO == "MEDELLIN")Icfes2[1:100,] %>% filter(DEPARTAMENTO == "ANTIOQUIA",
NOMBREMUNICIPIO == "MEDELLIN")Selección de posiciones específicas de una base de datos
slice(Icfes2, 1000:1050)Icfes2 %>%
slice(1000:1050)Ordenar la base de datos
arrange(Icfes2[1:100,], DEPARTAMENTO)arrange(Icfes2[1:100,], DEPARTAMENTO, NOMBREINSTITUCION)arrange(Icfes2[1:100,], PROMLECTURACRITICA)arrange(Icfes2[1:100,], desc(PROMLECTURACRITICA))Icfes2[1:100,] %>%
arrange(DEPARTAMENTO, desc(PROMLECTURACRITICA))Seleccion de columnas
select(Icfes2[1:100,], NOMBREMUNICIPIO, DEPARTAMENTO, PROMLECTURACRITICA)Icfes2[1:100,] %>%
select(NOMBREMUNICIPIO, DEPARTAMENTO, PROMLECTURACRITICA)Elementos o registros únicos
distinct(select(Icfes2, DEPARTAMENTO))Icfes2 %>%
select(DEPARTAMENTO) %>%
distinct()Adicionar una nueva columna
mutate(Icfes2[1:100,],promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)Icfes2[1:100,] %>%
mutate(promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)transmute(Icfes2[1:100,],promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)Icfes2[1:100,] %>%
transmute(promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)Resumir variables o consolidar valores
summarise(Icfes2, mean(PROMMATEMATICA))Icfes2 %>%
summarise(mean(PROMMATEMATICA))Agrupación
group_by(Icfes2[1:100,], DEPARTAMENTO)Icfes2[1:100,] %>%
group_by(DEPARTAMENTO)Combinación de “verbos” en base de datos
agrupados_deptos <- group_by(Icfes2, DEPARTAMENTO)
promedio_depto <- summarise(agrupados_deptos, mean(PROMMATEMATICA))
promedio_deptoMediante encadenamiento de verbos
Icfes2 %>%
group_by(DEPARTAMENTO) %>%
summarise(mean(PROMMATEMATICA))Combinación de manejo de datos
Icfes2 %>%
mutate(promTotal = rowMeans(.[10:16])) %>%
group_by(CODIGOMUNICIPIO) %>%
arrange(desc(promTotal)) %>%
select(NOMBREINSTITUCION, NOMBREMUNICIPIO, DEPARTAMENTO, promTotal) %>%
slice(1:3)¿Cuántas Instituciones Educativas tiene cada municipio?
Icfes2 %>%
group_by(CODIGOMUNICIPIO, NOMBREMUNICIPIO, DEPARTAMENTO) %>%
summarise(n = n()) %>%
select(DEPARTAMENTO, NOMBREMUNICIPIO, n) %>%
group_by(DEPARTAMENTO) %>%
arrange(desc(n))library(ggplot2)
Icfes2 %>%
ggplot(aes(x = PROMLECTURACRITICA,y = PROMMATEMATICA,
fill=JORNADA,colour=JORNADA))+
geom_point()Icfes2 %>%
ggplot(aes(y = PROMMATEMATICA,x=DEPARTAMENTO,
fill=DEPARTAMENTO))+
geom_boxplot()+ theme(legend.position = "none",
axis.text.x = element_text(angle = 90))